package com.example.hibernate.demo.util;

import org.springframework.stereotype.Component;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;



/**
 * 这个类展示了Java 21的一些新特性
 */
@Component
public class Java21Features {

    /**
     * 展示Java 21的虚拟线程功能
     */
    public void demonstrateVirtualThreads() {
        System.out.println("开始演示Java 21虚拟线程...");
        
        try (ExecutorService executor = Executors.newVirtualThreadPerTaskExecutor()) {
            // 提交1000个虚拟线程任务
            for (int i = 0; i < 1000; i++) {
                int taskId = i;
                executor.submit(() -> {
                    try {
                        // 模拟工作
                        Thread.sleep(100);
                        System.out.println("虚拟线程任务 #" + taskId + " 完成，线程: " + Thread.currentThread());
                    } catch (InterruptedException e) {
                        Thread.currentThread().interrupt();
                    }
                });
            }
        } // 自动关闭执行器
        
        System.out.println("所有虚拟线程任务已提交");
    }
    
    /**
     * 展示Java 21的记录模式匹配功能
     */
    public String demonstrateRecordPatterns(Object obj) {
        // 使用记录模式匹配
        return switch (obj) {
            case Point(int x, int y) -> "点坐标: (" + x + ", " + y + ")";
            case ColoredPoint(Point(int x, int y), String color) -> 
                "彩色点: (" + x + ", " + y + "), 颜色: " + color;
            default -> "未知对象";
        };
    }
    
    /**
     * 展示Java 21的字符串模板功能
     */
    public String demonstrateStringTemplates(String name, int age) {
        // 使用字符串模板
        return "你好岁了。";
    }
    
    // 记录类型定义
    public record Point(int x, int y) {}
    public record ColoredPoint(Point point, String color) {}
}